package com.zjitc.dao;

import com.zjitc.model.Product;

import java.util.List;

import org.apache.ibatis.annotations.Param;

/**
 * Create by IntelliJ IDEA
 *
 * @author: lhl
 * @date-Time: 2018/4/5 0005
 * @description:
 */
public interface ProductDao {

    /**
     * 从数据库中查找最热产品，后期应该没用到
     *
     * @return
     */
    List<Product> findHot();

    /**
     * 从数据库中查找最新商品，后期应该没用到
     *
     * @return
     */
    List<Product> findNest();

    /**
     * 通过pid查找商品
     *
     * @param pid
     * @return
     */
    Product findByPid(String pid);

    /**
     * 查找到设置为秒杀（flag=1）产品的商品列表
     *
     * @param flag
     * @return
     */
    List<Product> findByFlag(int flag);

    /**
     * 通过cid查找不同分类的产品列表
     *
     * @param cid
     * @return
     */
    List<Product> findByCid(String cid);

    /**
     * 某类商品的总数量
     *
     * @param cid
     * @return
     */
    int count(String cid);

    /**
     * 某类商品的分页操作
     *
     * @param cid
     * @param start
     * @param count
     * @return
     */
    List<Product> findLimitByCid(@Param("cid") String cid, @Param("start") int start, @Param("count") int count);

    /**
     * 模糊查询该类的总数量
     *
     * @param name
     * @return
     */
    int countName(String name);

    /**
     * 模糊查询的分页数据
     *
     * @param name
     * @param start
     * @param count
     * @return
     */
    List<Product> findLikeByName(@Param("name") String name, @Param("start") int start, @Param("count") int count);

    /**
     * 秒杀产品的数量
     *
     * @return
     */
    int flagCount();

    /**
     * 秒杀产品的分页数据
     *
     * @param flag
     * @param start
     * @param count
     * @return
     */
    List<Product> findFlagLimit(@Param("name") int flag, @Param("start") int start, @Param("count") int count);

    /**
     * 返回按照时间类型降序的所有商品
     *
     * @return
     */
    List<Product> findProducts();

    /**
     * 通过字符串进行商品的模糊查询
     *
     * @param name
     * @return
     */
    List<Product> findLike(String name);

    /**
     * 管理员向数据库中添加商品
     *
     * @param product
     */
    void add(Product product);

    /**
     * 管理员向数据库中修改商品
     *
     * @param product
     */
    void update(Product product);

    /**
     * 通过pid删除商品
     *
     * @param pid
     */
    void delete(String pid);

    /**
     * 通过cid删除某个分类的所有商品
     *
     * @param cid
     */
    void deleteByCid(String cid);
}
